home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / program / arp68bk.zoo / arp.src / prg_6dp.s < prev    next >
Text File  |  1985-11-20  |  3KB  |  77 lines

  1.  ; Program Name: PRG_6DP.S
  2.  ;      Version: 1.001
  3.  
  4.  ; Assembly Instructions:
  5.  
  6.  ;     Assemble in PC-relative mode and save with a PRG extension.
  7.  
  8.  ; Execution Instructions:
  9.  
  10.  ;     Execute from the desktop.
  11.  
  12.  ; Program Function:
  13.  
  14.  ; Turns off keyclick sound.  Refer to page 254 of the Internals book.  The
  15.  ; system variable at address $484 is a byte length variable.  The bits of
  16.  ; this variable have the meanings as indicated in the Internals book.  The
  17.  ; bit of interest is #0.  When this bit is a one, the computer emits a
  18.  ; click each time a key is pressed.  When the bit is a zero, these clicks
  19.  ; are not emitted.  A zero is placed in this bit by replacing the content
  20.  ; of the byte at $484 (which is 7 before the replacement, if key click is
  21.  ; enabled) with $6.
  22.  
  23.  ; If the object code for this program has a PRG extension, it may be placed
  24.  ; in the AUTO folder of a boot disk or hard disk partition so that it will
  25.  ; be executed during power up.  The reason for doing this would be to 
  26.  ; disable the key click without the presence of the desk accessory CONTROL,
  27.  ; thereby conserving the memory required by CONTROL.ACC.
  28.  
  29.  ; Of course, the program need not be executed at power up.  It may be
  30.  ; executed from the desktop whenever you wish to do so.
  31.  
  32.  ; Program Purpose:
  33.  
  34.  ; 1. Illustrate the use of GEMDOS function $20.
  35.  
  36.  ; 2. Illustrate the manner in which a system variable may be altered.
  37.  
  38.  ; 3. Show how the key click may be disabled without the presence of
  39.  ;    CONTROL.ACC as a desk accessory.
  40.  
  41.  ; 4. Show how to save a few lines of code by not repositioning the stack
  42.  ;    pointer after the first GEMDOS $20 call, then by using address register
  43.  ;    indirect with displacement addressing to store the SSP within the stack.
  44.  
  45. mainline:
  46.  lea        stack, a7           ; Point A7 to this program's stack.
  47.  
  48.  ; NOTE: For many programs, an extensive initialization routine is not
  49.  ;       necessary nor desirable.  Here, for instance, since this program
  50.  ;       will simply execute, remaining in memory for a very brief period,
  51.  ;       and since no other program will be executed in the mean time, there
  52.  ;       is no reason to calculate the program's size and return excess
  53.  ;       memory to the operating system.
  54.  
  55. enter_supervisor_mode:
  56.  move.l     #0, -(sp)           ; The zero turns on supervisor mode.
  57.  move.w     #$20, -(sp)         ; Function = super = GEMDOS $20.
  58.  trap       #1                  ; Content of SSP returned in D0.
  59.  move.l     d0, 2(sp)           ; Store returned value in stack.
  60.                                 ; Do not reposition stack pointer.
  61.  
  62. disable_key_click:
  63.  move.b     #6, $484            ; Refer to page 254 of the Internals book.
  64.  
  65. return_to_user_mode:            ; Stack is already setup.
  66.  trap       #1                 
  67.  addq.l     #6, sp              ; Now reposition stack pointer to top.
  68.  
  69. terminate:
  70.  move.w     #0, -(sp)           ; Function = p_term_old = GEMDOS $0.
  71.  trap       #1                  ; GEMDOS call.
  72.  
  73.              ds.l    24         ; Stack.
  74. stack:       ds.l     0         ; Address of stack.
  75. program_end: ds.l     0
  76.  end
  77.